/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * VlastnostiMistnostiDialog.java
 *
 * Created on 26.6.2012, 9:27:31
 */
package cz.worsik.vypocty.topeni.tepelneztraty.view;

import cz.worsik.utils.CyclicSpinnerListModel;
import cz.worsik.vypocty.topeni.tepelneztraty.model.Mistnost;
import cz.worsik.vypocty.topeni.tepelneztraty.model.Objekt;
import cz.worsik.vypocty.topeni.tepelneztraty.model.SvetovaStrana;
import cz.worsik.vypocty.topeni.tepelneztraty.service.ISvetoveStranyService;
import cz.worsik.vypocty.topeni.tepelneztraty.service.VypoctyService;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.JSpinner;
import javax.swing.SpinnerModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author 231260
 */
public class VlastnostiMistnostiDialog extends javax.swing.JDialog {
	
	private Mistnost mistnost;
	
	private static final Logger log = LoggerFactory.getLogger(VlastnostiObjektuDialog.class);
	private ISvetoveStranyService svetoveStranyService;

	/** Creates new form VlastnostiMistnostiDialog */
	public VlastnostiMistnostiDialog() {
	}
	
	public void createDialog()
	{
		log.debug("Vytvarim dialog pro novou mistnosti");
		initComponents();
		spinnerMistnostSvetovaStrana.setModel(new CyclicSpinnerListModel(getSvetoveStrany()));
		spinnerMistnostTeplota.setModel(new CyclicSpinnerListModel(getTeplotyProSpinner()));
		Toolkit tk = Toolkit.getDefaultToolkit();
		Dimension screenSize = tk.getScreenSize();
		int x = (screenSize.width-this.getWidth())/2;
		int y = (screenSize.height-this.getHeight())/2;
		setLocation(x,y);
	}

	public Mistnost getMistnost() {
		return mistnost;
	}

	public void setMistnost(Mistnost mistnost) {
		this.mistnost = mistnost;
		nactiZmenyDoPoli();
	}
	
	public List<SvetovaStrana> getSvetoveStrany()
	{
		return svetoveStranyService.getAll();
	}
	
	public List<Integer> getTeplotyProSpinner()
	{
		List<Integer> list = new ArrayList<Integer>();
		
		for (int i= -15; i<= 30; i++)
			list.add(i);
		
		return list;
	}

	/** This method is called from within the constructor to
	 * initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is
	 * always regenerated by the Form Editor.
	 */
	@SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        editMistnostNazev = new javax.swing.JTextField();
        editMistnostPrirazka_p3 = new javax.swing.JTextField();
        spinnerMistnostTeplota = new javax.swing.JSpinner();
        spinnerMistnostPodlazi = new javax.swing.JSpinner();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        spinnerMistnostSvetovaStrana = new javax.swing.JSpinner();
        ulozVlastnostiMistnostiButton = new javax.swing.JButton();
        jLabel7 = new javax.swing.JLabel();
        editMistnostUcel = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Vlastnosti Místnosti");
        setMinimumSize(new java.awt.Dimension(260, 300));
        setResizable(false);
        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11));
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("Zadejte prosím vlastnosti místnosti :");
        jLabel1.setPreferredSize(new java.awt.Dimension(260, 30));
        getContentPane().add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, -1, -1));

        jLabel2.setText("Název:");
        jLabel2.setPreferredSize(new java.awt.Dimension(120, 24));
        getContentPane().add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 54, -1, -1));

        jLabel3.setText("Účel:");
        jLabel3.setPreferredSize(new java.awt.Dimension(120, 24));
        getContentPane().add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 78, -1, -1));

        jLabel4.setText("Vnitřní teplota:");
        jLabel4.setPreferredSize(new java.awt.Dimension(120, 24));
        getContentPane().add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 102, -1, -1));

        editMistnostNazev.setFont(new java.awt.Font("Dialog", 1, 12)); // NOI18N
        editMistnostNazev.setHorizontalAlignment(javax.swing.JTextField.LEFT);
        editMistnostNazev.setText("101");
        editMistnostNazev.setPreferredSize(new java.awt.Dimension(70, 20));
        getContentPane().add(editMistnostNazev, new org.netbeans.lib.awtextra.AbsoluteConstraints(150, 56, -1, -1));

        editMistnostPrirazka_p3.setFont(new java.awt.Font("Dialog", 1, 12)); // NOI18N
        editMistnostPrirazka_p3.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        editMistnostPrirazka_p3.setText("0.1");
        editMistnostPrirazka_p3.setPreferredSize(new java.awt.Dimension(70, 20));
        getContentPane().add(editMistnostPrirazka_p3, new org.netbeans.lib.awtextra.AbsoluteConstraints(150, 152, -1, -1));

        spinnerMistnostTeplota.setPreferredSize(new java.awt.Dimension(70, 20));
        spinnerMistnostTeplota.setValue(20);
        getContentPane().add(spinnerMistnostTeplota, new org.netbeans.lib.awtextra.AbsoluteConstraints(150, 104, -1, -1));

        spinnerMistnostPodlazi.setModel(new javax.swing.SpinnerListModel(new String[] {""}));
        spinnerMistnostPodlazi.setPreferredSize(new java.awt.Dimension(70, 20));
        spinnerMistnostPodlazi.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                spinnerMistnostPodlaziStateChanged(evt);
            }
        });
        getContentPane().add(spinnerMistnostPodlazi, new org.netbeans.lib.awtextra.AbsoluteConstraints(150, 32, -1, -1));

        jLabel5.setText("Podlaží:");
        jLabel5.setPreferredSize(new java.awt.Dimension(120, 24));
        getContentPane().add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 30, -1, -1));

        jLabel6.setText("Světová strana:");
        jLabel6.setPreferredSize(new java.awt.Dimension(120, 24));
        getContentPane().add(jLabel6, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 126, -1, -1));

        spinnerMistnostSvetovaStrana.setModel(new javax.swing.SpinnerListModel(new String[] {""}));
        spinnerMistnostSvetovaStrana.setPreferredSize(new java.awt.Dimension(70, 20));
        getContentPane().add(spinnerMistnostSvetovaStrana, new org.netbeans.lib.awtextra.AbsoluteConstraints(150, 128, -1, -1));

        ulozVlastnostiMistnostiButton.setText("Uložit hodnoty");
        ulozVlastnostiMistnostiButton.setPreferredSize(new java.awt.Dimension(120, 24));
        ulozVlastnostiMistnostiButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ulozVlastnostiMistnostiButtonActionPerformed(evt);
            }
        });
        getContentPane().add(ulozVlastnostiMistnostiButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(70, 194, -1, -1));

        jLabel7.setText("Přirážka p3:");
        jLabel7.setPreferredSize(new java.awt.Dimension(120, 24));
        getContentPane().add(jLabel7, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 150, -1, -1));

        editMistnostUcel.setFont(new java.awt.Font("Dialog", 1, 12)); // NOI18N
        editMistnostUcel.setHorizontalAlignment(javax.swing.JTextField.LEFT);
        editMistnostUcel.setText("koupelna");
        editMistnostUcel.setPreferredSize(new java.awt.Dimension(70, 20));
        getContentPane().add(editMistnostUcel, new org.netbeans.lib.awtextra.AbsoluteConstraints(150, 80, -1, -1));

        pack();
    }// </editor-fold>//GEN-END:initComponents

	private void ulozVlastnostiMistnostiButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ulozVlastnostiMistnostiButtonActionPerformed
		ulozVlastnostiAZavriOkno();
	}//GEN-LAST:event_ulozVlastnostiMistnostiButtonActionPerformed

	private void spinnerMistnostPodlaziStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spinnerMistnostPodlaziStateChanged
		// nastavime nazev mistnosti podle podlazi a poradi jiz vytvorenych mistnosti
		JSpinner spinner = (JSpinner) evt.getSource();
		Objekt objekt = mistnost.getObjekt();
		int c_podlazi = objekt.getCisloPodlazi(objekt.getPodlaziList().indexOf(spinner.getModel().getValue()));
		editMistnostNazev.setText(""+c_podlazi+"01");
	}//GEN-LAST:event_spinnerMistnostPodlaziStateChanged

	/**
	 * @param args the command line arguments
	 */
	public static void main(String args[]) {
		/* Set the Nimbus look and feel */
		//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
		 * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
		 */
		try {
			for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
				if ("Nimbus".equals(info.getName())) {
					javax.swing.UIManager.setLookAndFeel(info.getClassName());
					break;
				}
			}
		} catch (ClassNotFoundException ex) {
			java.util.logging.Logger.getLogger(VlastnostiMistnostiDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
		} catch (InstantiationException ex) {
			java.util.logging.Logger.getLogger(VlastnostiMistnostiDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
		} catch (IllegalAccessException ex) {
			java.util.logging.Logger.getLogger(VlastnostiMistnostiDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
		} catch (javax.swing.UnsupportedLookAndFeelException ex) {
			java.util.logging.Logger.getLogger(VlastnostiMistnostiDialog.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
		}
		//</editor-fold>
	}
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextField editMistnostNazev;
    private javax.swing.JTextField editMistnostPrirazka_p3;
    private javax.swing.JTextField editMistnostUcel;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JSpinner spinnerMistnostPodlazi;
    private javax.swing.JSpinner spinnerMistnostSvetovaStrana;
    private javax.swing.JSpinner spinnerMistnostTeplota;
    private javax.swing.JButton ulozVlastnostiMistnostiButton;
    // End of variables declaration//GEN-END:variables

	private void nactiZmenyDoPoli() {
		// nacti podlazi do spinneru
		if (mistnost.getObjekt() != null)
		{
			Objekt objekt = mistnost.getObjekt();
			List<String> list = objekt.getPodlaziList();
			SpinnerModel model = new CyclicSpinnerListModel(list);
			
			spinnerMistnostPodlazi.setModel(model);
			if (mistnost.getPodlazi() > 0)
				spinnerMistnostPodlazi.setValue(list.get(objekt.getPocet_podlazi_pp()+mistnost.getPodlazi()));
			if (mistnost.getPodlazi() < 0)
				spinnerMistnostPodlazi.setValue(list.get(objekt.getPocet_podlazi_pp()-mistnost.getPodlazi()));
			if (mistnost.getPodlazi() == 0)
				spinnerMistnostPodlazi.setValue(list.get(objekt.getPocet_podlazi_pp()));
		}
		
		spinnerMistnostTeplota.setValue(mistnost.getTeplota_vnitrni());
		editMistnostNazev.setText(mistnost.getNazev());
		editMistnostUcel.setText(mistnost.getUcel());
	}

	public void setSvetoveStranyService(ISvetoveStranyService svetoveStranyService) {
		this.svetoveStranyService = svetoveStranyService;
	}
	
	private void ulozVlastnostiAZavriOkno()
	{
		// nacti vlastnosti mistnosti
		mistnost.setNazev(editMistnostNazev.getText());
		mistnost.setUcel(editMistnostUcel.getText());
		
		mistnost.setTeplota_vnitrni((Integer) spinnerMistnostTeplota.getValue());
		mistnost.setPodlazi(
			mistnost.getObjekt().getPodlaziList().indexOf(spinnerMistnostPodlazi.getValue())
			- mistnost.getObjekt().getPocet_podlazi_pp());
		mistnost.setSvetova_strana((SvetovaStrana) spinnerMistnostSvetovaStrana.getValue());
		
		try
		{
			mistnost.setPrirazka_p3(VypoctyService.applyDoubleFormat(editMistnostPrirazka_p3.getText()));
		}
		catch (ParseException e)
		{
			// Problem pri parsovani
			log.error("Nastal problem pri parsovani vychozich hodnot soucinitelu objektu.",e);
			JOptionPane.showMessageDialog(null,
                    "Zadané hodnoty nelze uložit. Prosím zkontrolujte jejich formát. (Oddělovač desetinných míst je ',')",
                    "Chyba při načítání hodnot", JOptionPane.ERROR_MESSAGE);
		}
		this.dispose();
	}
}
